<!DOCTYPE html>
<html class="client-nojs vector-feature-night-mode-disabled vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-1 vector-sticky-header-enabled" lang="en" dir="ltr"><head>
<meta charset="UTF-8">
<title>Pin (computer program)</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="canonical" href="https://en.wikipedia.org/wiki/Pin_(computer_program)"> <link href="./mw/ext.cite.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.icons.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/user.styles.css" rel="stylesheet" type="text/css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link rel="stylesheet" type="text/css" href="./mw/site.styles.css">
<link rel="stylesheet" type="text/css" href="./mw/noscript.css">
<link rel="stylesheet" type="text/css" href="./footer.css">
<link rel="stylesheet" type="text/css" href="./vector-2022.css">
</head>
<body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-Pin_computer_program rootpage-Pin_computer_program skin-vector-2022 action-view">
<div class="mw-page-container">
<div class="mw-page-container-inner">
<div class="mw-content-container">
<main id="content" class="mw-body">
<header class="mw-body-header vector-page-titlebar">
<h1 id="firstHeading" class="firstHeading mw-first-heading">
<span id="openzim-page-title" class="mw-page-title-main"><span class="mw-page-title-main">Pin (computer program)</span></span>
</h1>
</header>
<a id="top"></a>
<div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="en" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="en" dir="ltr"><style data-mw-deduplicate="TemplateStyles:r1295905060">
/* start https://en.wikipedia.org/ */
.mw-parser-output .infobox-subbox{padding:0;border:none;margin:-3px;width:auto;min-width:100%;font-size:100%;clear:none;float:none;background-color:transparent}.mw-parser-output .infobox-3cols-child{margin:auto}.mw-parser-output .infobox .navbar{font-size:100%}@media screen{html.skin-theme-clientpref-night .mw-parser-output .infobox-full-data:not(.notheme)>div:not(.notheme)[style]{background:#1f1f23!important;color:#f8f9fa}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .infobox-full-data:not(.notheme)>div:not(.notheme)[style]{background:#1f1f23!important;color:#f8f9fa}}@media(min-width:640px){body.skin--responsive .mw-parser-output .infobox-table{display:table!important}body.skin--responsive .mw-parser-output .infobox-table>caption{display:table-caption!important}body.skin--responsive .mw-parser-output .infobox-table>tbody{display:table-row-group}body.skin--responsive .mw-parser-output .infobox-table th,body.skin--responsive .mw-parser-output .infobox-table td{padding-left:inherit;padding-right:inherit}}
/* end https://en.wikipedia.org/ */
</style><table class="infobox vevent"><tbody><tr><th colspan="2" class="infobox-above summary">Pin</th></tr><tr><th scope="row" class="infobox-label" style="white-space: nowrap;"><a href="Programmer" title="Programmer">Developer(s)</a></th><td class="infobox-data"><a href="Intel" title="Intel">Intel</a></td></tr><tr style="display: none;"><td colspan="2" class="infobox-full-data"></td></tr><tr><th scope="row" class="infobox-label" style="white-space: nowrap;"><a href="Software_release_life_cycle" title="Software release life cycle">Stable release</a></th><td class="infobox-data"><div style="margin:0px;">3.31
/ June 30, 2024<span style="display: none;"> (<span class="bday dtstart published updated itvstart">2024-06-30</span>)</span></div></td></tr><tr style="display:none"><td colspan="2">
</td></tr><tr><th scope="row" class="infobox-label" style="white-space: nowrap;"><a href="Operating_system" title="Operating system">Operating system</a></th><td class="infobox-data"><a href="Linux" title="Linux">Linux</a>, <a href="Windows" class="mw-redirect" title="Windows">Windows</a>, <a href="MacOS" title="MacOS">macOS</a></td></tr><tr><th scope="row" class="infobox-label" style="white-space: nowrap;"><a href="Computing_platform" title="Computing platform">Platform</a></th><td class="infobox-data"><a href="IA-32" title="IA-32">IA-32</a>, <a href="X86-64" title="X86-64">x86-64</a>, <a href="Intel_Xeon_Phi" class="mw-redirect" title="Intel Xeon Phi">Intel Xeon Phi</a></td></tr><tr><th scope="row" class="infobox-label" style="white-space: nowrap;"><a href="Software_categories#Categorization_approaches" title="Software categories">Type</a></th><td class="infobox-data"><a href="Instrumentation_(computer_programming)" title="Instrumentation (computer programming)">Instrumentation framework</a>, <a href="Profiling_(computer_programming)" title="Profiling (computer programming)">Profiler</a></td></tr><tr><th scope="row" class="infobox-label" style="white-space: nowrap;"><a href="Software_license" title="Software license">License</a></th><td class="infobox-data"><a href="Proprietary_software" title="Proprietary software">Proprietary</a>, Pin is given free of charge for any use under the <b><a rel="nofollow" class="external text" href="https://software.intel.com/sites/landingpage/pintool/intel-simplified-software-license.txt">Intel Simplified Software License</a></b>.</td></tr><tr><th scope="row" class="infobox-label" style="white-space: nowrap;">Website</th><td class="infobox-data"><span class="url"><a rel="nofollow" class="external text" href="http://www.intel.com/software/pintool">www<wbr>.intel<wbr>.com<wbr>/software<wbr>/pintool</a></span></td></tr></tbody></table>
<p><b>Pin</b> is a platform for creating analysis tools. A pin tool comprises instrumentation, analysis and callback <a href="Subroutine" class="mw-redirect" title="Subroutine">routines</a>. Instrumentation routines are called when code that has not yet been recompiled is about to be run, and enable the insertion of analysis routines. Analysis routines are called when the code associated with them is run. Callback routines are only called when specific conditions are met, or when a certain event has occurred. Pin provides an extensive <a href="Application_programming_interface" class="mw-redirect" title="Application programming interface">application programming interface</a> (API) for instrumentation at different abstraction levels, from one instruction to an entire binary module. It also supports callbacks for many events such as library loads, system calls, signals/exceptions and thread creation events.
</p><p>In 2020, it received the <i>Programming Languages Software Award</i> from <a href="Association_for_Computing_Machinery" title="Association for Computing Machinery">ACM</a> <a href="SIGPLAN" title="SIGPLAN">SIGPLAN</a>.<sup id="cite_ref-1" class="reference"><a href="#cite_note-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup>
</p><p>Pin performs instrumentation by taking control of the program just after it loads into the memory. Then <a href="Just-in-time_compilation" title="Just-in-time compilation">just-in-time recompiles</a> (JIT) small sections of the binary code using pin just before it is run. New instructions to perform analysis are added to the recompiled code. These new instructions come from the Pintool. A large array of optimization techniques are used to obtain the lowest possible running time and memory use overhead. As of June 2010, Pin's average base overhead is 30 percent (without running a pintool).<sup id="cite_ref-2" class="reference"><a href="#cite_note-2"><span class="cite-bracket">[</span>2<span class="cite-bracket">]</span></a></sup>
</p>
<meta property="mw:PageProp/toc">
<div class="mw-heading mw-heading2"><h2 id="Features">Features</h2></div>
<div class="mw-heading mw-heading3"><h3 id="Instrumentation_modes">Instrumentation modes</h3></div>
<p>Pin supports two modes of instrumentation called JIT mode and Probe mode. JIT mode supports all features of Pin, while Probe mode supports a limited feature set but is far faster, adding almost no overhead to program's running time. JIT mode uses a just-in-time compiler to recompile all program code and insert instrumentation, while Probe mode uses <a href="Trampoline_(computers)" class="mw-redirect" title="Trampoline (computers)">code trampolines</a> for instrumentation.
</p>
<div class="mw-heading mw-heading3"><h3 id="Platform_independence">Platform independence</h3></div>
<p>Pin was designed for tool <a href="Cross-platform" class="mw-redirect" title="Cross-platform">portability</a>, and despite JIT compiling from one ISA to the same ISA (and not using a single <a href="Intermediate_representation" title="Intermediate representation">intermediate representation</a> for all code), most of its APIs are architecture and <a href="Operating_system" title="Operating system">operating system</a> independent. It was also designed to be portable itself, carefully isolating platform-specific code from generic code, allowing the fast adaptation of Pin to new platforms. Approximately half of the code is generic and the rest is either architecture or OS dependent.<sup id="cite_ref-3" class="reference"><a href="#cite_note-3"><span class="cite-bracket">[</span>3<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading3"><h3 id="Optimizations">Optimizations</h3></div>
<p>Pin uses many techniques to optimize instrumentation and analysis code, using techniques such as <a href="Inline_function" class="mw-redirect" title="Inline function">inlining</a>, <a href="Liveness_analysis" class="mw-redirect" title="Liveness analysis">liveness analysis</a> and smart <a href="Register_spilling" class="mw-redirect" title="Register spilling">register spilling</a>. Pin performs these optimizations automatically whenever possible, without needing users to insert any extra code to allow inlining. Naturally, some optimizations still require user hints, and some code structures are easier to inline than others. Direct linking of jitted code sections, a technique called <i>trace linking</i>, and <i>register binding reconciliation</i>, which minimizes register spilling and remapping, are also used.
</p>
<div class="mw-heading mw-heading3"><h3 id="Ease_of_use">Ease of use</h3></div>
<p>Pin’s API and implementation are focused on making pin tools easy to write. Pin takes full responsibility for assuring that the instrumentation code from the pin tool does not affect the application state. Also, the API enables instrumentation code to request many pieces of information from Pin. For example, the instrumentation code in the pin tool can use the Pin API to get the memory address being accessed by an instruction, without having to examine the instruction in detail.
</p>
<div class="mw-heading mw-heading2"><h2 id="Tools">Tools</h2></div>
<p>There are many Pintools that are used for varying tasks.
</p>
<ul><li>Components of <b><a href="Intel_Parallel_Studio" title="Intel Parallel Studio">Intel Parallel Studio</a></b> make heavy use of pintools for memory debugging, performance analysis, <a href="Thread_(computer_science)" class="mw-redirect" title="Thread (computer science)">multithreading</a> correctness analysis and parallelization preparation.</li>
<li><b><a rel="nofollow" class="external text" href="http://software.intel.com/en-us/articles/intel-software-development-emulator/">Intel Software Development Emulator</a></b> is a pintool that enables the development of applications using instruction set extensions that are not currently implemented in hardware.</li>
<li><b>CMP$IM</b> is a cache profiler built using pin.<sup id="cite_ref-4" class="reference"><a href="#cite_note-4"><span class="cite-bracket">[</span>4<span class="cite-bracket">]</span></a></sup></li>
<li><b><a rel="nofollow" class="external text" href="http://www.pinplay.org">PinPlay</a></b> enables the capture and deterministic replay of the running of multithreaded programs under pin. Capturing the running of a program helps developers overcome the non-determinism inherent in multithreading.<sup id="cite_ref-5" class="reference"><a href="#cite_note-5"><span class="cite-bracket">[</span>5<span class="cite-bracket">]</span></a></sup></li>
<li>Pin itself comes with many example tools that make use of its abilities. These tools are licensed under a BSD-like license.</li></ul>
<div class="mw-heading mw-heading2"><h2 id="Alternatives_to_Pin_Tool">Alternatives to Pin Tool</h2></div>
<p>There are many other tools available to collect resource usage of running programs on the system such as <a href="Bell_Lab" class="mw-redirect" title="Bell Lab">Bell Lab</a>’s strapon tool and Dyninst tool etc. <a href="Bell_Lab" class="mw-redirect" title="Bell Lab">Bell Lab</a>’s tool uses the strap on technology which runs a tool to collect resources simultaneously with the program but this tool is only compatible with the programs which allow other programs to run simultaneously with them.<sup id="cite_ref-6" class="reference"><a href="#cite_note-6"><span class="cite-bracket">[</span>6<span class="cite-bracket">]</span></a></sup> Furthermore, Dyninst tool uses <a href="Binary_rewriting" class="mw-redirect" title="Binary rewriting">binary rewriting</a> of the program’s executable and implementable commands inside the program to check for resource usage and is very efficient. However, it is very unstable as it is a relatively new tool and crashes on large scale programs.<sup id="cite_ref-7" class="reference"><a href="#cite_note-7"><span class="cite-bracket">[</span>7<span class="cite-bracket">]</span></a></sup> Lastly, <a href="Intel" title="Intel">Intel</a> Pin tool uses static binary instrumentation and runs the program as a part of itself while keeping track of all its resources.<sup id="cite_ref-8" class="reference"><a href="#cite_note-8"><span class="cite-bracket">[</span>8<span class="cite-bracket">]</span></a></sup> This approach is more suitable for an antivirus as it can easily run all the processes under itself and can kill programs if they reach a maximum allocated limit as defined by the antivirus.
</p>
<div class="mw-heading mw-heading2"><h2 id="See_also">See also</h2></div>
<ul><li><a href="Dynamic_program_analysis" title="Dynamic program analysis">Dynamic program analysis</a></li>
<li><a href="Valgrind" title="Valgrind">Valgrind</a></li>
<li><a href="DynamoRIO" title="DynamoRIO">DynamoRIO</a></li></ul>
<div class="mw-heading mw-heading2"><h2 id="Notes">Notes</h2></div>
<style data-mw-deduplicate="TemplateStyles:r1239543626">
/* start https://en.wikipedia.org/ */
.mw-parser-output .reflist{margin-bottom:0.5em;list-style-type:decimal}@media screen{.mw-parser-output .reflist{font-size:90%}}.mw-parser-output .reflist .references{font-size:100%;margin-bottom:0;list-style-type:inherit}.mw-parser-output .reflist-columns-2{column-width:30em}.mw-parser-output .reflist-columns-3{column-width:25em}.mw-parser-output .reflist-columns{margin-top:0.3em}.mw-parser-output .reflist-columns ol{margin-top:0}.mw-parser-output .reflist-columns li{page-break-inside:avoid;break-inside:avoid-column}.mw-parser-output .reflist-upper-alpha{list-style-type:upper-alpha}.mw-parser-output .reflist-upper-roman{list-style-type:upper-roman}.mw-parser-output .reflist-lower-alpha{list-style-type:lower-alpha}.mw-parser-output .reflist-lower-greek{list-style-type:lower-greek}.mw-parser-output .reflist-lower-roman{list-style-type:lower-roman}
/* end https://en.wikipedia.org/ */
</style><div class="reflist">
<div class="mw-references-wrap"><ol class="references">
<li id="cite_note-1"><span class="mw-cite-backlink"><b><a href="#cite_ref-1">^</a></b></span> <span class="reference-text"><style data-mw-deduplicate="TemplateStyles:r1238218222">
/* start https://en.wikipedia.org/ */
.mw-parser-output cite.citation{font-style:inherit;word-wrap:break-word}.mw-parser-output .citation q{quotes:"\"""\"""'""'"}.mw-parser-output .citation:target{background-color:rgba(0,127,255,0.133)}.mw-parser-output .id-lock-free.id-lock-free a{background:url("./mw/Lock-green.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-limited.id-lock-limited a,.mw-parser-output .id-lock-registration.id-lock-registration a{background:url("./mw/Lock-gray-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-subscription.id-lock-subscription a{background:url("./mw/Lock-red-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .cs1-ws-icon a{background:url("./mw/Wikisource-logo.svg")right 0.1em center/12px no-repeat}body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-free a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-limited a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-registration a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-subscription a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .cs1-ws-icon a{background-size:contain;padding:0 1em 0 0}.mw-parser-output .cs1-code{color:inherit;background:inherit;border:none;padding:inherit}.mw-parser-output .cs1-hidden-error{display:none;color:var(--color-error,#d33)}.mw-parser-output .cs1-visible-error{color:var(--color-error,#d33)}.mw-parser-output .cs1-maint{display:none;color:#085;margin-left:0.3em}.mw-parser-output .cs1-kern-left{padding-left:0.2em}.mw-parser-output .cs1-kern-right{padding-right:0.2em}.mw-parser-output .citation .mw-selflink{font-weight:inherit}@media screen{.mw-parser-output .cs1-format{font-size:95%}html.skin-theme-clientpref-night .mw-parser-output .cs1-maint{color:#18911f}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .cs1-maint{color:#18911f}}
/* end https://en.wikipedia.org/ */
</style><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://www.sigplan.org/Awards/Software/">"Programming Languages Software Award"</a>. <i>www.sigplan.org</i>.</cite></span>
</li>
<li id="cite_note-2"><span class="mw-cite-backlink"><b><a href="#cite_ref-2">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="http://www.jaleels.org/ajaleel/publications/ieeeComputer10.pdf">Analyzing Parallel Programs with Pin</a></span>
</li>
<li id="cite_note-3"><span class="mw-cite-backlink"><b><a href="#cite_ref-3">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="http://ursuletz.com/people/faculty/pdfs/p190-luk.pdf">Pin: Building Customized Program Analysis Tools with Dynamic Instrumentation</a></span>
</li>
<li id="cite_note-4"><span class="mw-cite-backlink"><b><a href="#cite_ref-4">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="http://www.ece.umd.edu/~blj/papers/mobs2008.pdf">CMP$im: A Pin-Based On-The-Fly Multi-Core Cache Simulator</a></span>
</li>
<li id="cite_note-5"><span class="mw-cite-backlink"><b><a href="#cite_ref-5">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="http://delivery.acm.org/10.1145/1780000/1772958/p2-patil.pdf">PinPlay: a framework for deterministic replay and reproducible analysis of parallel programs</a></span>
</li>
<li id="cite_note-6"><span class="mw-cite-backlink"><b><a href="#cite_ref-6">^</a></b></span> <span class="reference-text"><cite id="CITEREFGupta2007" class="citation journal cs1">Gupta, Chandrashekhar (2007). "Building secure products and solutions". <i>Bell Labs Technical Journal</i>. <b>12</b> (3): 21-38. <a href="Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1002%2Fbltj.20247">10.1002/bltj.20247</a>. <a href="S2CID_(identifier)" class="mw-redirect" title="S2CID (identifier)">S2CID</a> <a rel="nofollow" class="external text" href="https://api.semanticscholar.org/CorpusID:30412754">30412754</a>.</cite></span>
</li>
<li id="cite_note-7"><span class="mw-cite-backlink"><b><a href="#cite_ref-7">^</a></b></span> <span class="reference-text"><cite id="CITEREFLee2007" class="citation journal cs1">Lee, Schulz (2007). "Dynamic binary instrumentation and data aggregation on large scale systems". <i>International Journal of Parallel Programming</i>. <b>35</b> (3): <span class="nowrap">207–</span>232. <a href="Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1007%2Fs10766-007-0036-3">10.1007/s10766-007-0036-3</a>. <a href="S2CID_(identifier)" class="mw-redirect" title="S2CID (identifier)">S2CID</a> <a rel="nofollow" class="external text" href="https://api.semanticscholar.org/CorpusID:6653468">6653468</a>.</cite></span>
</li>
<li id="cite_note-8"><span class="mw-cite-backlink"><b><a href="#cite_ref-8">^</a></b></span> <span class="reference-text"><cite id="CITEREFBachCharneyCohnDemikhovsky2010" class="citation journal cs1">Bach, M.; Charney, M.; Cohn, R.; Demikhovsky, E.; Devor, T.; Hazelwood, K.; Jaleel, A.; Luk, Chi-Keung; Lyons, G. (March 2010). "Analyzing Parallel Programs with PIN". <i>Computer</i>. <b>43</b> (3): <span class="nowrap">34–</span>41. <a href="Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1109%2FMC.2010.60">10.1109/MC.2010.60</a>. <a href="ISSN_(identifier)" class="mw-redirect" title="ISSN (identifier)">ISSN</a> <a rel="nofollow" class="external text" href="https://search.worldcat.org/issn/0018-9162">0018-9162</a>. <a href="S2CID_(identifier)" class="mw-redirect" title="S2CID (identifier)">S2CID</a> <a rel="nofollow" class="external text" href="https://api.semanticscholar.org/CorpusID:15155077">15155077</a>.</cite></span>
</li>
</ol></div></div>
<div class="mw-heading mw-heading2"><h2 id="References">References</h2></div>
<style data-mw-deduplicate="TemplateStyles:r1239549316">
/* start https://en.wikipedia.org/ */
.mw-parser-output .refbegin{margin-bottom:0.5em}.mw-parser-output .refbegin-hanging-indents>ul{margin-left:0}.mw-parser-output .refbegin-hanging-indents>ul>li{margin-left:0;padding-left:3.2em;text-indent:-3.2em}.mw-parser-output .refbegin-hanging-indents ul,.mw-parser-output .refbegin-hanging-indents ul li{list-style:none}@media(max-width:720px){.mw-parser-output .refbegin-hanging-indents>ul>li{padding-left:1.6em;text-indent:-1.6em}}.mw-parser-output .refbegin-columns{margin-top:0.3em}.mw-parser-output .refbegin-columns ul{margin-top:0}.mw-parser-output .refbegin-columns li{page-break-inside:avoid;break-inside:avoid-column}@media screen{.mw-parser-output .refbegin{font-size:90%}}
/* end https://en.wikipedia.org/ */
</style><div class="refbegin" style="">
<ul><li><cite id="CITEREFMoshe_BachMark_CharneyRobert_CohnElena_Demikhovsky2010" class="citation journal cs1">Moshe Bach; Mark Charney; Robert Cohn; Elena Demikhovsky; Tevi Devor; Kim Hazelwood; Aamer Jaleel; Chi-Keung Luk; Gail Lyons; Harish Patil & Ady Tal (March 2010). <a rel="nofollow" class="external text" href="https://web.archive.org/web/20101229163736/http://www.computer.org/portal/web/csdl/magazines/computer#4">"Analyzing Parallel Programs With Pin"</a>. <i>Computer</i>. <b>43</b> (3). IEEE: <span class="nowrap">34–</span>41. <a href="Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1109%2Fmc.2010.60">10.1109/mc.2010.60</a>. <a href="S2CID_(identifier)" class="mw-redirect" title="S2CID (identifier)">S2CID</a> <a rel="nofollow" class="external text" href="https://api.semanticscholar.org/CorpusID:15155077">15155077</a>. Archived from <span class="id-lock-subscription" title="Paid subscription required"><a rel="nofollow" class="external text" href="http://www.computer.org/portal/web/csdl/magazines/computer#4">the original</a></span> on 2010-12-29<span class="reference-accessdate">. Retrieved <span class="nowrap">2010-07-05</span></span>.</cite></li>
<li><cite id="CITEREFChi-Keung_LukRobert_CohnRobert_MuthHarish_Patil2005" class="citation conference cs1">Chi-Keung Luk; Robert Cohn; Robert Muth; Harish Patil; Artur Klauser; Geoff Lowney; Steven Wallace; Vijay Janapa Reddi & Kim Hazelwood (June 2005). <a rel="nofollow" class="external text" href="https://www.cs.tufts.edu/comp/150IPL/papers/luk05pin.pdf">"Pin: Building Customized Program Analysis Tools with Dynamic Instrumentation"</a> <span class="cs1-format">(PDF)</span>. <i>Proceedings of the 2005 ACM SIGPLAN conference on Programming language design and implementation</i>. Chicago, Illinois, USA: ACM. pp. <span class="nowrap">190–</span>120.</cite></li>
<li><cite id="CITEREFAlex_SkaletskyTevi_DevorNadav_ChachmonRobert_Cohn2010" class="citation conference cs1">Alex Skaletsky; Tevi Devor; Nadav Chachmon; Robert Cohn; Kim Hazelwood; Vladimir Vladimirov; Moshe Bach (April 2010). <a rel="nofollow" class="external text" href="https://web.archive.org/web/20160918102825/http://www.cs.virginia.edu/kim/docs/ispass10.pdf">"Dynamic Program Analysis of Microsoft Windows Applications"</a> <span class="cs1-format">(PDF)</span>. <i>International Symposium on Performance Analysis of Software and Systems (ISPASS)</i>. White Plains, NY. pp. <span class="nowrap">2–</span>12. Archived from <a rel="nofollow" class="external text" href="http://www.cs.virginia.edu/kim/docs/ispass10.pdf">the original</a> <span class="cs1-format">(PDF)</span> on 2016-09-18.</cite></li></ul>
</div>
<div class="mw-heading mw-heading2"><h2 id="External_links">External links</h2></div>
<ul><li><a rel="nofollow" class="external text" href="http://pintool.intel.com/">Pin: a dynamic binary instrumentation tool</a> home page</li>
<li><a rel="nofollow" class="external text" href="https://groups.io/g/pinheads">Pinheads</a>, a mailing list for the Pin users community</li>
<li><a rel="nofollow" class="external text" href="http://jbremer.org/detecting-uninitialized-memory-read-access-bugs-using-pin-a-la-valgrind/">Detecting Read-Before-Write Bugs (a la Valgrind)</a></li>
<li><a rel="nofollow" class="external text" href="https://github.com/SEDS/PinPP">Pin++</a>, a framework for authoring Pintools</li></ul></div><!--htdig_noindex--><div><div class="zim-footer">
This article is issued from <a class="external text" title="Last edited on 2025-05-24" href="https://en.wikipedia.org/wiki/?title=Pin_(computer_program)&oldid=1291969705">Wikipedia</a>. The text is available under <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.en">Creative Commons Attribution-Share Alike 4.0</a> unless otherwise noted. Additional terms may apply for the media files.
</div>
</div><!--/htdig_noindex--></div>
</div>
</main>
</div>
</div>
</div>
</body></html>